Skip to content

[6.x] Fix page: 0 corrupting the collection tree in ReorderEntriesController - #15429

Merged
jasonvarga merged 1 commit into
6.xfrom
fix/reorder-entries-page-zero
Sep 8, 2026
Merged

[6.x] Fix page: 0 corrupting the collection tree in ReorderEntriesController#15429
jasonvarga merged 1 commit into
6.xfrom
fix/reorder-entries-page-zero

Conversation

@jasonvarga

Copy link
Copy Markdown
Member

page: 0 (or perPage: 0) produces a negative array offset, which slices from the end of the tree, passes the out-of-date guard (the submitted ids genuinely match that slice), and then writes negative keys back onto the tree — appending duplicates instead of overwriting. The corrupt tree reaches disk before a 500 is thrown, permanently breaking the collection's entries listing until someone hand-edits the tree YAML.

Not reachable by clicking — the CP always posts the page it fetched — but a forged/malformed request can hit it via devtools, curl, or a buggy addon, so it's worth hardening.

Adds min:1 to the page/perPage validation rules, matching what already ships for taxonomy reordering.

page: 0 (or perPage: 0) produces a negative array offset, slicing from the
end of the tree, passing the out-of-date guard, and writing negative keys
back onto it — corrupting the collection's tree permanently on disk.
@jasonvarga
jasonvarga merged commit 2db29d6 into 6.x Sep 8, 2026
65 checks passed
@jasonvarga
jasonvarga deleted the fix/reorder-entries-page-zero branch September 8, 2026 19:29
jasonvarga added a commit that referenced this pull request Sep 10, 2026
ReorderTermsController was a copy of ReorderEntriesController as it stood on
2026-08-13. #15238 fixed the original eight days later, and the 6.x merge
brought the fixed entries controller in alongside the unfixed copy.

Ports that fix. A positional write replaces zip(), which padded with null and
so silently dropped or duplicated branches, and a set-equality check now 409s
when the submitted ids aren't a rearrangement of the page being reordered.
Between them that covers short payloads, unknown slugs, duplicate ids and
out-of-range pages, all of which previously returned 200 and corrupted the
tree file. Also brings across #15238's toast change so the 409 message is
actually shown.

Adds min:1 to page and perPage, which #15238 did not have. Without it, page 0
yields a negative offset that slices from the end of the tree and then writes
negative keys onto it. That hole was found here and fixed for collections in
#15429.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant